/**
 *
 * @author Erivaldo Lourenco
 * @author Juliana Cavalcanti
 * 
 */

package br.ufal.ic.p3.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import br.ufal.ic.p3.Interface.funcionario.TelaFuncionarioInserido;
import br.ufal.ic.p3.funcionario.*;
import br.ufal.ic.p3.informacao.Endereco;

public class FuncionarioDao {

	private DaoUtilidades daoUtilidades;

	public FuncionarioDao() {
		daoUtilidades = new DaoUtilidades();
	}

	public void inserir(Funcionario funcionario) {

		Connection conn = null;
		java.sql.PreparedStatement stmt = null;
		int i = 0;

		try {

			conn = daoUtilidades.getConection();
			
			// inserindo endereco
			EnderecoDao enderecoDao = new EnderecoDao();
			enderecoDao.inserir(funcionario.getEndereco());
			enderecoDao.idEndereco(funcionario.getEndereco());
			int v = enderecoDao.idEndereco(funcionario.getEndereco()); 
			//System.out.println("Endereco inserido em Funcionario com sucesso!");
			
			// inserindo contato
			ContatoDao contatoDao = new ContatoDao();
			contatoDao.inserir(funcionario.getContato());
			contatoDao.idContato(funcionario.getContato());
			int w = contatoDao.idContato(funcionario.getContato());
			//System.out.println("Contato inserido em Funcionario com sucesso!");

			stmt = conn
					.prepareStatement("insert into FUNCIONARIO (cpf, nome, sobrenome, rg, "
							+ "cargo, idEndereco, idContato) values (?,?,?,?,?,?,?);");
			stmt.setString(++i, funcionario.getCpf());
			stmt.setString(++i, funcionario.getNome());
			stmt.setString(++i, funcionario.getSobrenome());
			stmt.setString(++i, funcionario.getRg());
			stmt.setString(++i, funcionario.getCargo());
			stmt.setInt(++i, v);
			stmt.setInt(++i, w);
			stmt.executeUpdate();

			TelaFuncionarioInserido janela = new TelaFuncionarioInserido();
			janela.setSize(440, 210);
			janela.setVisible(true);

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (stmt != null) {
				try {
					stmt.close();
				} catch (SQLException e) {
					
					e.printStackTrace();
				}
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					
					e.printStackTrace();
				}
			}
		}
	}
	
	public void deletar(Funcionario funcionario) {

		Connection conn = null;
		java.sql.PreparedStatement stmt = null;
		
		try {

			conn = daoUtilidades.getConection();
			
			stmt = conn
					.prepareStatement("DELETE FROM FUNCIONARIO (cpf, nome, sobrenome, rg, "
							+ "cargo, idEndereco, idContato) WHERE cpf = '" + funcionario.getCpf() + "'");
		
			stmt.executeUpdate();
			System.out.println("Funcionario excluido com sucesso!");
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (stmt != null) {
				try {
					stmt.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

	}
	
	public void alterar(Funcionario funcionario) {

		Connection conn = null;
		java.sql.PreparedStatement stmt = null;

		try {

			conn = daoUtilidades.getConection();
			
			stmt = conn
					.prepareStatement("UPDATE FUNCIONARIO (cpf, nome, sobrenome, rg, "
							+ "cargo, idEndereco, idContato) WHERE cpf = '" + funcionario.getCpf() + "'");
		
			stmt.executeUpdate();
			System.out.println("Funcionario excluido com sucesso!");
			
		} catch (SQLException e) {
			
			e.printStackTrace();
		
		} finally {
			
			if (stmt != null) {
				try {
					stmt.close();
				} catch (SQLException e) {
					
					e.printStackTrace();
				}
			}
			
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					
					e.printStackTrace();
				}
			}
		}
			
	}
	
	public String cpfFuncionario(Funcionario funcionario) {

		String v = "";
		Connection conn = null;
		java.sql.PreparedStatement stmt = null;
		try {
			conn = daoUtilidades.getConection();

			String consulta = "SELECT cpf FROM `FUNCIONARIO` WHERE cpf = '"
					+ funcionario.getCpf() + "'";
			stmt = conn.prepareStatement(consulta);
			ResultSet rs = stmt.executeQuery();

			if (rs.next()) {
				v = rs.getString(1);
			}

			System.out.println("o CPF de " + funcionario.getNome() + " é:" + v);

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			daoUtilidades.release(stmt);
			daoUtilidades.release(conn);
		}
		System.out.println("IdEndereco: " + v);
		return v;
	}

	public ArrayList<String> carregarFuncionarios() {
		ArrayList<String> array = new ArrayList<String>();
		 
		Connection conn = null;
		Statement stmt = null;
		try {
			conn = daoUtilidades.getConection();

			stmt = conn.createStatement();

			String sql = "select * from FUNCIONARIO;";
			ResultSet rs = stmt.executeQuery(sql);

			while (rs.next()) {
				String nome = rs.getString("nome");
				String sobrenome = rs.getString("sobrenome");
				array.add(nome+" "+sobrenome);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return array;
	}
}
